{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import scipy\n",
    "import pybel\n",
    "import sys\n",
    "\n",
    "from rdkit import Chem\n",
    "from rdkit.Chem.Lipinski import NumAromaticRings\n",
    "from rdkit.Chem import PandasTools\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Notebook with datasets generator for aromatic rings experiments"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this notebook one can prepare train and test datasets for Mol-CycleGAN experiments, for the following datasets:\n",
    "\n",
    "1. Dataset A - molecules with 2 aromatic rings\n",
    "2. Dataset B - molecules with 1 or 3 aromatic rings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Read ZINC dataset and calculate number of aromatic rings for every molecule"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_number_of_aromatic_rings(smiles):\n",
    "    mol = Chem.MolFromSmiles(smiles)\n",
    "    return NumAromaticRings(mol)\n",
    "\n",
    "\n",
    "def create_dataset_with_function(path, function, new_col_name):\n",
    "    df = pd.read_csv(path)\n",
    "    print(\"df shape: {}\".format(df.shape))\n",
    "    \n",
    "    df.dropna(inplace=True)\n",
    "    df.drop_duplicates(subset='smiles', inplace=True)\n",
    "    print(\"df shape after dropping nans and duplicates: {}\".format(df.shape))\n",
    "    \n",
    "    df[new_col_name] = df['smiles'].apply(function)\n",
    "    \n",
    "    df.dropna(inplace=True)\n",
    "    print(\"df shape after applying function: {}\".format(df.shape))\n",
    "    \n",
    "    df = df[['smiles', new_col_name]].set_index('smiles')\n",
    "    \n",
    "    print(\"Final df shape: {}\".format(df.shape))\n",
    "          \n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_JTVAE = pd.read_csv('../X_JTVAE_250k_rndm_zinc.csv', index_col=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "df shape: (249455, 4)\n",
      "df shape after dropping nans and duplicates: (249455, 4)\n",
      "df shape after applying function: (249455, 5)\n",
      "Final df shape: (249455, 1)\n",
      "Number of molecules in the ZINC dataset: 249455\n"
     ]
    }
   ],
   "source": [
    "df = create_dataset_with_function(path='../250k_rndm_zinc_drugs_clean_3_canonized.csv', \n",
    "                                  function=calculate_number_of_aromatic_rings, \n",
    "                                  new_col_name='aromatic_rings')\n",
    "\n",
    "print(\"Number of molecules in the ZINC dataset: %d\" % df.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot aromatic rings distribution in the ZINC dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 0.5)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "smiles = df['aromatic_rings'].values\n",
    "ar_counts = np.bincount(smiles) / float(len(smiles))\n",
    "\n",
    "plt.figure(figsize=(20,10))\n",
    "plt.rcParams.update({'font.size': 22})\n",
    "plt.title('Fraction of aromatic rings in ZINC dataset')\n",
    "plt.bar(range(7), ar_counts)\n",
    "plt.ylim((0, 0.5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create train and test datasets\n",
    "1. set A = molecules with 2 aromatic rings\n",
    "2. set B = molecules with 1 or 3 aromatic rings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of molecules with 1/2/3 aromatic rings: 221413\n"
     ]
    }
   ],
   "source": [
    "# Take only mols with 1,2,3 aromatic rings\n",
    "mols_to_stay = np.logical_or.reduce((df['aromatic_rings'].values == 1, df['aromatic_rings'].values == 2, df['aromatic_rings'].values == 3))\n",
    "df_experiment = df.iloc[mols_to_stay]\n",
    "print(\"Number of molecules with 1/2/3 aromatic rings: %d\" % df_experiment.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of molecules in dataset A: 98220\n",
      "Number of molecules in dataset B: 123193\n"
     ]
    }
   ],
   "source": [
    "# Split molecules into dataset A and B\n",
    "A_indices = df_experiment['aromatic_rings'].values == 2\n",
    "\n",
    "df_A = df_experiment.iloc[A_indices]\n",
    "df_B = df_experiment.iloc[~A_indices]\n",
    "\n",
    "print(\"Number of molecules in dataset A: %d\" % df_A.shape[0])\n",
    "print(\"Number of molecules in dataset B: %d\" % df_B.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Sanity check of datasets\n",
    "assert set(df_A['aromatic_rings'].values) == set([2])\n",
    "assert set(df_B['aromatic_rings'].values) == set([1,3])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of molecules in dataset train_A: 80000\n",
      "Number of molecules in dataset test_A: 18220\n",
      "Number of molecules in dataset train_B: 80000\n",
      "Number of molecules in dataset test_B: 43193\n"
     ]
    }
   ],
   "source": [
    "# Split datasets into train and test datasets.\n",
    "train_size = 80000\n",
    "\n",
    "# split set A to train/test\n",
    "train_sample_A = np.zeros(df_A.shape[0], dtype=bool)\n",
    "train_sample_A[np.random.choice(df_A.shape[0], train_size, replace=False)] = True\n",
    "\n",
    "df_train_A = df_A.iloc[train_sample_A]\n",
    "df_test_A = df_A.iloc[~train_sample_A]\n",
    "print(\"Number of molecules in dataset train_A: %d\" % df_train_A.shape[0])\n",
    "print(\"Number of molecules in dataset test_A: %d\" % df_test_A.shape[0])\n",
    "\n",
    "# split set B to train/test\n",
    "train_sample_B = np.zeros(df_B.shape[0], dtype=bool)\n",
    "train_sample_B[np.random.choice(df_B.shape[0], train_size, replace=False)] = True\n",
    "\n",
    "df_train_B = df_B.iloc[train_sample_B]\n",
    "df_test_B = df_B.iloc[~train_sample_B]\n",
    "print(\"Number of molecules in dataset train_B: %d\" % df_train_B.shape[0])\n",
    "print(\"Number of molecules in dataset test_B: %d\" % df_test_B.shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot aromatic rings distribution in train and test datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7fec73abfbd0>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Vs4991y22WabJlujsrKSq6++mssuu4w5c2peW56zZMkS3nvvPZ5++mmuvPJK+vTpw0knncQ555xTluTQU089xejRo3nkkUeoqqpa7ffly5fz8ccfM336dMaOHct5553H5ZdfzimnnFL2RGhj3HnnnZx44onMnTu3WvvMmTOZOXMmDz/8MJdeeim33HILe+65Zx2zfDaZSCuDlNLkiHgJ2C7fdF5E3JtSWlnHkNFF5dnA35s0QEmSJElSm7H//vs3euzMmTOZMuXT24kGDhxYjpAKqqqqOP/887nrrrvKOu8q06dP5+CDD+bll1+u1t6+fXs22WQT+vbtS8eOHXn//feZOXMmS5YsAeCjjz7i0ksv5frrr2fatGl07949UxxPPPEE//jHP6q1dejQgc0335x+/fqxYsUKpkyZwrx584Dc7rlTTz2Vl19+mWuvvbZBa5X6z3vTTTctqd9tt93G0UcfXa1tyy23ZMCAAUybNo3p06cDMGPGDPbbbz8mTJjAHnvsUdtUn0km0tYgIqYBg/LVR1JKw9bQ/XxyO9MAvgBcAZxZy5xnAIcWNf00pbQkc7CSJEmSpM+EcePGNWrcokWLGDJkSKHesWNH7rjjjnKFVXD33XczefLkamuVwyuvvMLw4cOZPXt2oW277bbj3HPP5cADD6RXr17V+i9dupRJkybxpz/9iVtvvZWVK1cyZ84cli9fXraYunTpwqGHHsqxxx7LnnvuWS1BV1VVxd13382pp57KrFmzALjuuuvYcccdOfnkk0teo7H/vGszZcoUTjjhhEJ9yy235NZbb2WXXXYptI0fP55jjz2W2bNns2zZMg499FBeffVV+vbtW7Y4WrM289hARPwuIiprfmp0q7VPRAyqddIGSCndC9xW1HRGRDwaEd+OiGERcVRE3A/8qqjPI0DDUtGSJEmSJDXCd77zHd54441C/Ze//CW77bZb2ebffPPNC+Uf/ehHZZsXcju6jjjiiGpJtIsvvpjnn3+eo48+erUkGkDnzp3Zf//9GTNmDC+//DLDhw8vWzzdu3fnrLPOYvr06fzpT3/iwAMPXG2XW7t27Tj88MN56qmn6N+/f6H9ggsuYMWK+q5VbxqjR4+msjKXKllvvfV45JFHqiXRAPbbbz8mTpxI586dgdxuvssuu6zZY11btZlEGtAR6FzLp1iHOvqU64DyCcD4ovoewE3AP4A/AcU3Uf4bOCylVL5UuCRJkiRJtfjVr37FnXfeWagfddRRnHrqqWVdo/iBgvHjx/PII4+Ube4zzjiD1157rVD/5S9/yfnnn0+7dqWlNbbaaisefPBBzj777LLcUTZq1Ch+8Ytf0K9fv3r7Dho0qNp/NnPmzOHRR5v/zcHXXnuNe+759Ir2Sy65pFqCr9i2227L6aefXqhfc801LFiwoMljbA3aUiKtxaWUKoEDgLOAWXV0mwdcCuyWUppbRx9JkiRJksri8ccf55xzzinUt9lmG373u9+VfZ0DDzyQoUOHFurl2pU2c+ZMbrzxxkJ9v/3248wzV7tJqV7t27fn5z//ecmvZ5bTIYccUq3+6quvNnsMxffW9ejRg2OOOWaN/U888cRCubKykgceeKAscYwdO5auXbsSEUQEhxxySOEuu9agzSTSUkrHp5SikZ9pdcw5uKjPsBLjqEop/QrYCBgGfA/4EXAysD8wIKU0OqW0rBx/bkmSJEmS6jJ79myOPPLIwlHCHj16cOedd2a+bL8ul156aaH85JNPcv/992ee88orr6x2FLJ4jdaiT58+1eoLFy5s9hiK/1kMHTqUHj16rLH/pptuypZbblnr+Ma68cYbOfzwwwvHS4899ljuvvtuunbtmnnu5tJmEmlrm5TSypTSIyml36eULkspXZdSesgEmiRJkiSpOaxcuZJvfvObhYvuAf7whz+w1VZbNdmae+yxBwcccEChfsEFF5BSyjTnvffeWyjvuOOOZX/EoDmseglzlVKOhJZTSokXX3yxUN99991LGlfc74UXXsgUwxVXXMEJJ5zAypUrATj99NMZM2YMHTq0rncwTaRJkiRJktQG/ehHP6p2T9kPfvADjjzyyCZf95JLLincQ/b8889z++23N3qu2bNn8+abbxbq5XwwoDkVH6sEGvTIw3HHHccWW2xBjx496NatGwMHDmTvvffmwgsv5O233y5pjpkzZ7J48eJCfbPNNitpXHG/N998s5AEa6gf/vCH/PCHPyzUL774Yn7961+X5b665mYiTZIkSZKkNmbs2LFcccUVhfqXvvSlavWmtMsuu3DYYYcV6j/+8Y8bnYCZPHlytXpr3I328ccf89vf/rZQ32GHHdh2221LHn/LLbfw5ptvsnjxYpYsWcK7777LpEmTuOiii9hyyy05/vjjWbRo0RrnmDZtWrX6xhtvXNLaxf2WLVvGe++9V3LckNsVecIJJxT+u9euXTuuueYazj///AbNszYxkSZJkiRJUhvy1ltv8e1vf7twpLJfv37ccccddOzYsdliuPjii2nfvj0Ab7zxBjfddFOj5vnwww+r1UtNAK1NzjjjjGoJqIbe8TZgwAB23313hg8fzi677EK3bt0Kv61cuZIxY8YwZMgQ3n///TrnqHknW6kPLlRUVFSr15ewK1ZZWcnhhx9eeCiiU6dO3HbbbZx88sklz7E2MpEmSZIkSVIbsWTJEg4//HAWLFgA5F6q/POf/8wGG2zQrHFsvfXWjBw5slD/yU9+wtKlSxs8z0cffVSt3hIvbmZxww038Pvf/75QHzlyJAcddNAax0QEu+66K9dddx3vvPMOs2bN4sknn2TChAlMnjyZ+fPnM3bsWD7/+c8XxrzxxhsccsghLF++vNY5i491AnTp0qWk+Gs+AvDxxx+XNG7BggXsv//+jB07FoDu3btz3333NcvR4qZmIk2SJEmSpDZi1KhR1S6Vv+SSS9h7771bJJYLL7yQTp06ATBjxgyuvfbaBs9RM/nWuXPnssTWHCZOnMioUaMK9S222IKrr7663nGDBg3imWee4cQTT2TDDTdc7feOHTvy1a9+lWeffbbaww6TJ0/mD3/4Q61z1kywlXrBf81+y5bV/37i7NmzGTZsGI8++igAvXv3ZuLEiYwYMaKkNdd2JtIkSZIkSWoDrr/+esaMGVOof/WrX+Wcc85psXgGDx7M9773vUL90ksvXW1nVH3WXXfdavWaRxTXVs888wxf//rXC4mn9ddfn7///e/07NmzbGt07dqVv/zlL9VeAL3yyitr7Vt8HBRyxy5LUbNfjx491th/0aJFDB06lOeffx6AgQMH8thjj/HFL36xpPVag9b1xqgkSZIkSVrNc889x2mnnVaob7bZZtx8880t/iri+eefz4033sgnn3zCBx98wG9+8xtGjx5d8vjevXtXq8+dO7es8b344ovVXpOsy7hx40qe8/nnn+eAAw4oHINcb731mDBhAptuummj46xLRUUFo0aN4qKLLgLgtddeY8aMGavdJVczAbZkyZKS5v/kk0/WOE9Nc+fOrfbP6IILLmCbbbYpaa3WwkSaJEmSJEmt2Ny5czniiCMKxyC7du3KnXfeuVbcJzZgwABOPfVUfvaznwHwi1/8gu9///v06tWrpPE1k08vvfQS++67b9nimzt3Lg8++GDZ5psyZQojRoxg/vz5APTq1Yvx48c3aTJp7733LiTSIHdfWs1E2nrrrVetPmvWrJLmrvmAQZ8+fdbYv1+/fmy00UY899xzAJx22mlstNFGHHjggSWt1xp4tFOSJEmSpFYqpcSxxx7LtGnTCm1XX301O+ywQ8sFVcM555xTSOrNnz+fK664ouSxO++8M927dy/Un3nmmbLHVy5vvPEGw4cPL7w0WlFRwbhx49hxxx2bdN3111+/Wn3OnDmr9dliiy2q7U6cMWNGSXPPnDmzUO7Xr1+9CdCuXbsyfvx4dt55ZyB3x92hhx7aoB19azsTaZIkSZIktVKXXHIJDzzwQKH+ve99j+OPP77lAqpFr169OOusswr1//3f/2X27Nklje3QoQNf/vKXC/W//e1vLFq0qGyxDRs2jJRSvZ/6TJ06leHDhxd2cHXv3p0HHniAXXfdtWyx1qXm8cuaL21C7kjmRhttVKivusOsPv/+978L5a233rqkMb169WLChAnstNNOwKfJtIceeqik8Ws7E2mSJEmSJLVC48eP58ILLyzUd9llF37729+2XEBrcMYZZ9C3b18AFi9ezE9/+tOSxxY/WPDxxx9z4403lj2+LGbOnMnw4cN55513gFwi67777quWAGxKU6ZMqVbv379/rf323HPPQvnxxx+vd97ly5dX2wFYPL4+NZNplZWVfO1rX2P8+PElz7G2MpEmSZIkSVIrM3PmTI4++miqqqqA3KX8f/3rX+ncuXMLR1a7Hj16cN555xXq1113XcnHCw877DA+97nPFeoXXHBBtSOHDTFjxozCXXLlMGvWLPbZZ5/C0drOnTtzzz33sPfee5dtjfrcdttthXK3bt0Kyauavva1rxXKr776arXdZrW59957q+3++/rXv96guHr37s2ECRMKR1srKyv56le/yoQJExo0z9rGRJokSZIkSa3IsmXL+MY3vlG4CysiuOWWWxg8eHDLBlaP73//+wwcOBDI/RkuueSSksa1a9eOq666inbtcimMhQsXcvDBB692EX59/vGPfzBkyJCSX6ysz4cffsi+++7LW2+9BUCnTp248847GTFiRFnmL8XYsWO5//77C/UDDzywzmTqQQcdRL9+/Qr1Nf3nv3LlSi6//PJCffvtty/ce9YQvXv3ZuLEiYU7+1Yl0yZOnNjgudYWJtIkSZIkSWpFzjzzzGpH7s4//3wOOuigFoyoNJ07d+bHP/5xof7mm2+WPHbEiBH86Ec/KtRffPFFdtttN+688856x06dOpVjjjmm2kMAWc2bN4/99tuvcKyyQ4cO/OUvf+ErX/lKpnlfeeUVvvvd7/L666/X2/ePf/wjRx99dKHevn37aq931tStWzdGjx5dqN91111ceeWVq/VLKXHWWWcxefLkQlupSc/arEqmbb/99gAsWbKEQw45hIcffrjRc7akDi0dgCRJkiRJKs2ECRO46qqrCvWI4Omnn+aAAw5o9JwjR45k5MiR5QivXt/5zne44oorGpREW+UnP/kJK1asKOyUmj59OkcccQRbbbUVBx10ELvssgt9+/alY8eOvP/++7z11ls88MADPPPMM4UjsOUyevRoXnjhhUK9T58+XHvttVx77bUljd9vv/2qPcCwyvLly7nhhhu44YYb2Hnnndlnn33Yfvvt6d+/P926dWPBggW8+OKL3HHHHasdzfzNb37Dtttuu8Z1R40axZ133smjjz4KwOmnn87EiRM5+uijGTBgANOmTeP3v/89TzzxRGHM0UcfzSGHHFLSn6suffr0YeLEiQwfPpwXX3yxkEy7//77m/UYbDmYSJMkSZIkqZVYdaH9KimlzBe477bbbpnGN0SHDh246KKLqu2kKlVEcNlll7HNNttw9tlnF17+fO2113jttdfqHd+rVy9Gjx5NRUVFg9euqeZLmbNnz+bBBx8sefyAAQPq7fOvf/2Lf/3rX/X269q1K7/61a84+eST6+3bsWNH7rrrLvbdd9/Cy5333Xcf9913X639R4wYwQ033FDvvKVYb731mDhxIvvssw8vvfQSn3zyCQcffDB/+9vfGDZsWFnWaA4m0iRJkiRJazTt8mzH1aRi3/rWt7j88st58cUXGzX+2GOP5bDDDuP//u//uO2223jxxRdJKdXaNyLYeeedOe644zjuuONYd911s4Te5NZff32OOuooJk2axKxZs9bYt2fPnowcOZIzzzyz2mMM9enTpw/PPPMMF110Eddccw3z5s2rNY6zzz6b008/nYho8J+jLuuttx4PP/xwrcm0vfbaq2zrNKWo679sWjsNGTIkFZ9TliSpXheu08LrL2jZ9SVJBa++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\n",
      "text/plain": [
       "<Figure size 1440x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_counts = np.bincount(df['aromatic_rings'].values) / float(len(df['aromatic_rings'].values))\n",
    "df_A_counts = np.bincount(df_A['aromatic_rings'].values) / float(len(df_A['aromatic_rings'].values))\n",
    "df_B_counts = np.bincount(df_B['aromatic_rings'].values) / float(len(df_B['aromatic_rings'].values))\n",
    "\n",
    "plt.figure(figsize=(20,10))\n",
    "plt.rcParams.update({'font.size': 35})\n",
    "\n",
    "ax = plt.subplot(111)\n",
    "ax.bar(np.arange(7)-0.1, df_counts, width=0.2, label='ZINC-250k')\n",
    "ax.bar(np.arange(7)+0.1, np.concatenate([df_A_counts, np.repeat(0., 4)]), width=0.2, label='A')\n",
    "ax.bar(np.arange(7)+0.1, np.concatenate([df_B_counts, np.repeat(0., 3)]), width=0.2, label='B')\n",
    "\n",
    "plt.ylim((0, 1.05))\n",
    "\n",
    "plt.ylabel('Fraction of molecules')\n",
    "plt.xlabel('Number of aromatic rings')\n",
    "\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Save datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "((80000, 56), (18220, 56), (80000, 56), (43193, 56))\n"
     ]
    }
   ],
   "source": [
    "X_JTVAE_zinc_train_A = X_JTVAE.loc[df_train_A.index]\n",
    "X_JTVAE_zinc_test_A = X_JTVAE.loc[df_test_A.index]\n",
    "\n",
    "X_JTVAE_zinc_train_B = X_JTVAE.loc[df_train_B.index]\n",
    "X_JTVAE_zinc_test_B = X_JTVAE.loc[df_test_B.index]\n",
    "\n",
    "print(X_JTVAE_zinc_train_A.shape, X_JTVAE_zinc_test_A.shape, \n",
    "      X_JTVAE_zinc_train_B.shape, X_JTVAE_zinc_test_B.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_JTVAE_zinc_train_A.to_csv('X_JTVAE_zinc_train_A.csv')\n",
    "X_JTVAE_zinc_test_A.to_csv('X_JTVAE_zinc_test_A.csv')\n",
    "X_JTVAE_zinc_train_B.to_csv('X_JTVAE_zinc_train_B.csv')\n",
    "X_JTVAE_zinc_test_B.to_csv('X_JTVAE_zinc_test_B.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
